#ifndef _IBuilder_H_
#define _IBuilder_H_
#include <string>
class Product;
class IBuilder
{
public:
	virtual ~IBuilder();
	virtual void BuildPartA(const std::string& buildPara) = 0;
	virtual void BuildPartB(const std::string& buildPara) = 0;
	virtual void BuildPartC(const std::string& buildPara) = 0;
	virtual Product* GetProduct() = 0;
protected:
	IBuilder();
private:
	
};

class FatBuilder : public IBuilder {
public:
	FatBuilder();
	~FatBuilder();
	void BuildPartA(const std::string& buildPara);
	void BuildPartB(const std::string& buildPara);
	void BuildPartC(const std::string& buildPara);
	Product* GetProduct();
private:
	Product* product;
};

class ThinBuilder : public IBuilder {
public:
	ThinBuilder();
	~ThinBuilder();
	void BuildPartA(const std::string& buildPara);
	void BuildPartB(const std::string& buildPara);
	void BuildPartC(const std::string& buildPara);
	Product* GetProduct();
private:
	Product* product;
};
#endif // !_IBuilder_H_



